﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.CRM.Catalogos
{
    public class dbo_Cat_Campana
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public dbo_Cat_Campana(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Campana(

            string Nombre,
            int Estatus,
            double Presupuesto,
            DateTime FechaInicio,
            DateTime FechaTermino,
            string Descripcion = ""
            
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Campana
                             (
                                Id_Campana,
                                RFC,
                                Nombre,
                                Descripcion,    
                                Estatus,
                                FechaInicio,
                                FechaTermino,   
                                Presupuesto,                                                         
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                             )
                             VALUES
                             (
                                IIF(DCount('*', 'dbo_Cat_Campana') = 0, 1, DMax('Id_Campana', 'dbo_Cat_Campana') + 1),
                                '@@RFC',
                                '@@Nombre',
                                '@@Descripcion',                                
                                @@Estatus,                                
                                '@@FechaInicio',                                
                                '@@FechaTermino', 
                                @@Presupuesto,                                                               
                                NOW(),
                                '@@Usuario_Alta',
                                NOW(),
                                '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);
                Query = Query.Replace("@@Descripcion", Descripcion.Replace("'", "''"));
                Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
                Query = Query.Replace("@@FechaInicio", FechaInicio.ToString());
                Query = Query.Replace("@@FechaTermino", FechaTermino.ToString());
                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
                Query = Query.Replace("@@Presupuesto", Presupuesto.ToString());                
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Campana_Por_Id(
            object Id,
            string Nombre,
            double Presupuesto,
            int Estatus,
            DateTime FechaInicio,
            DateTime FechaTermino,
            string Descripcion = ""
            
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Campana SET
                                             
                                    Nombre = '@@Nombre',
                                    Descripcion = '@@Descripcion',     
                                    Estatus = @@Estatus,  
                                    Presupuesto = @@Presupuesto,
                                    FechaInicio = '@@FechaInicio',                                
                                    FechaTermino = '@@FechaTermino',
                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Campana = @@Id";

                Query = Query.Replace("@@Descripcion", Descripcion.Replace("'", "''"));
                Query = Query.Replace("@@Presupuesto", Presupuesto.ToString());                
                Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
                Query = Query.Replace("@@FechaInicio", FechaInicio.ToShortTimeString());
                Query = Query.Replace("@@FechaTermino", FechaTermino.ToShortTimeString());
                Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));                
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());                

                return SrvDB.ExecuteQuery_Update(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Campana_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Campana 
                                    WHERE Id_Campana = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Delete(Query);
                
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Campana_Por_Id(object Id)
        {

            string Query = @"SELECT 

                                A1.*,
								A2.Nombre AS Desc_Estatus
								
                            FROM (dbo_Cat_Campana AS A1
                            
                                INNER JOIN dbo_Cat_Estatus       AS A2 ON A1.Estatus = A2.Estatus)

                            WHERE A1.Id_Campana = @@Id";
            Query = Query.Replace("@@Id", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Campana_Por_Nombre(string Nombre)
        {

            string Query = @"SELECT 

                                A1.*,
								A2.Nombre AS Desc_Estatus
								
                            FROM (dbo_Cat_Campana AS A1
                            
                                INNER JOIN dbo_Cat_Estatus       AS A2 ON A1.Estatus = A2.Estatus)

                            WHERE A1.Nombre = '@@Nombre' AND A1.RFC = '@@RFC'";
            Query = Query.Replace("@@Nombre", Nombre.Replace("'", "''"));
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Campanas()
        {
            string Query = @"SELECT 

                                A1.*,
								A2.Nombre AS Desc_Estatus,
                                '' AS CostoActividades,
                                '' AS CostoDiferencia
								
                            FROM (dbo_Cat_Campana AS A1
                            
                                INNER JOIN dbo_Cat_Estatus       AS A2 ON A1.Estatus = A2.Estatus)
                            WHERE A1.RFC = '@@RFC'";
            Query = Query.Replace("@@RFC", this._RFC);
            
            DataTable dt_Campanas =  SrvDB.ExecuteQuery_Get(Query);

            double Mi_Costo = 0;

            for (int i = 0; i < dt_Campanas.Rows.Count; i++)
            {
                SIIE_ERP.BaseDatos.CRM.Transacciones.dbo_Trans_Actividad Trans_Actividad = new Transacciones.dbo_Trans_Actividad(this._RFC, this._Usuario);
                Mi_Costo = Trans_Actividad.Get_CostoActividades(Int32.Parse(dt_Campanas.Rows[i]["Id_Campana"].ToString()));
                dt_Campanas.Rows[i]["CostoActividades"] = Mi_Costo.ToString();
                dt_Campanas.Rows[i]["CostoDiferencia"] = (Double.Parse(dt_Campanas.Rows[i]["Presupuesto"].ToString()) - Mi_Costo).ToString();
            }

            return dt_Campanas;
        }

        #endregion
    }
}
